#include <iostream>
#include <fstream>
#include <SFML/Graphics.hpp>
#include "../include/GraphicEngine.hpp"

using namespace std;

GraphicEngine::GraphicEngine(sf::RenderWindow &App) : m_app(App)
{
    LoadGUI();
    LoadSystem();
}

void GraphicEngine::LoadGUI()
{
    // On ouvre un fichier au cas où il y aurais des erreurs
    ofstream error("Errors/GraphicGUIError.log", ios::app);
    error.seekp(0, ios::end);
    // On ouvre le fichier avec tous les chemins des images de la GUI
    ifstream document("Config/GraphicEngine/GUI.graphic");
    document.seekg(0, ios::beg);

    string line; // Sert à stocker le chemin de chaque images

    if(document)
    {
        while(document)
        {
            getline(document, line);

            if(line != "")
            {
                m_gui.push_back(sf::Image());
                if(!m_gui.back().LoadFromFile(line))
                {
                    error << "Erreur: Impossible d'ouvrir le fichier " << line << endl;
                }
                m_gui.back().SetSmooth(false);
            }
        }
    }
    else
    {
        error << "Erreur: Impossible de lire le fichier GUI.graphic" << endl;
    }
}
void GraphicEngine::LoadSystem()
{
    // On ouvre un fichier au cas où il y aurais des erreurs
    ofstream error("Errors/GraphicSystemError.log", ios::app);
    error.seekp(0, ios::end);
    // On ouvre le fichier avec tous les chemins des images de la GUI
    ifstream document("Config/GraphicEngine/System.graphic");
    document.seekg(0, ios::beg);

    string line; // Sert à stocker le chemin de chaque images

    if(document)
    {
        while(document)
        {
            getline(document, line);

            if(line != "")
            {
                m_system.push_back(sf::Image());
                if(!m_system.back().LoadFromFile(line))
                {
                    error << "Erreur: Impossible d'ouvrir le fichier " << line << endl;
                }
                m_system.back().SetSmooth(false);
            }
        }
    }
    else
    {
        error << "Erreur: Impossible de lire le fichier GUI.graphic" << endl;
    }
}

sf::Image* GraphicEngine::GetGUIImage(unsigned int id)
{
    if(id < m_gui.size())
        return &m_gui[id];
    else
        return &m_gui[0];
}
sf::Image* GraphicEngine::GetSystemImage(unsigned int id)
{
    if(id < m_system.size())
        return &m_system[id];
    else
        return &m_system[0];
}

void GraphicEngine::Draw(const sf::Drawable &objet)
{
    m_app.Draw(objet);
}
void GraphicEngine::Clear(const sf::Color& color)
{
    m_app.Clear(color);
}
void GraphicEngine::Display()
{
    m_app.Display();
}
